package br.com.controller.diretor;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.arquitetura.controlador.AbstractMBean;
import br.com.arquitetura.excecoes.BDException;
import br.com.arquitetura.servico.ServiceCadastro;
import br.com.controller.acesso.MBAcessoUsuario;
import br.com.data.hibernate.AlunoHibernateDAO;
import br.com.data.hibernate.DiretorHibernateDAO;
import br.com.data.hibernate.TurmaHibernateDAO;
import br.com.model.entidade.Aluno;
import br.com.model.entidade.Aula;
import br.com.model.entidade.Diretor;
import br.com.model.entidade.Escola;
import br.com.model.entidade.Progresso;
import br.com.model.entidade.Turma;
import br.com.model.entidade.Usuario;

@ManagedBean
@ViewScoped
public class MBDiretorEscola extends AbstractMBean<Diretor>{


	private Diretor diretor;

	@ManagedProperty(value="#{serviceCadastro}")
	private ServiceCadastro serviceCadastro;
	
	public void setServiceCadastro(ServiceCadastro serviceCadastro) {
		this.serviceCadastro = serviceCadastro;
	}
	
	public MBDiretorEscola() {
		
			
			
			MBAcessoUsuario acesso = new MBAcessoUsuario();//Recuperando o usuario e o diretor relacionado a ele
			Usuario user = acesso.getUsuario();
			Diretor d = new Diretor();
			DiretorHibernateDAO diretorHibernateDAO = (DiretorHibernateDAO) getBean("diretorHibernateDAO");
			
			try {
				d = diretorHibernateDAO.getByField(Diretor.class,"usuario", user).get(0);
			} catch (BDException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			diretor = d;
			
		}
	
	public void encerrarAno() {
		TurmaHibernateDAO turmaHibernateDAO = (TurmaHibernateDAO) getBean("turmaHibernateDAO");
		List<Turma> turmas = turmaHibernateDAO.buscarAtivaPOrEscola(diretor.getEscola());
		System.out.println("entrou no encerrar " + turmas.size() );
		boolean podeFechar = true;
		
		for (Turma turma : turmas) {
			System.out.println("tou na tuma " + turma.getNome());
			for (Aula aula : turma.getAulas()) {
				System.out.println("tou na aula " + aula.getBimestreCorrente());
				if(!aula.getBimestreCorrente().contentEquals("FINALIZADO")){
					podeFechar = false;
					
					addFacesErrorMessage("Exitem turmas com aulas ainda em aberto");
					return;
				}
			}
		}
		
		boolean aprovado = true;
		
		for (Turma turma : turmas) {//Pega todas as turmas da escola
			turma.setAtivo(false);	//Desativa a turma (não eh turma atual)		
			for (Aluno aluno : turma.getAlunos()) {//Pegar os alunos de cada turma
				aprovado = true;
				for (Progresso progresso : aluno.getProgressos()) {//Verificar se ele foi aprovado em todas disciplinas
					if(progresso.getMediaFinal() <= 5){//Se for reprovado em uma esta reprovado
						aprovado = false;
						break;
					}
				}
				if(aprovado){// se nao esta reprovado passa de serie (aprovado)
					aluno.aprovar();
				}
			}
			turma.setAtivo(false);
			serviceCadastro.atualizar(turma);
		}
		addFacesInformationMessage("Ano escolar encerrado");
		
	}
	
	
}
